#! /usr/bin/env python
# _*_ encoding: UTF-8 _*_
# Author: Gordon.Wang
import json
from data_define import Record
'''和文件相关的类定义'''
class FileReader:   #先定义一个抽象类用来做顶层设计，确定有哪些功能需要实现
    def read_data(self) -> list[Record]:  #list[Record]  在列表中存储Record类
        '''读取文件的数据，读到的每一条数据都转换为Record对象，将它们都封装到list内返回即可'''
        pass
class TextFileReader(FileReader):   #单继承，继承FileReader，实现读取文本文件的程序
    def __init__(self,path):
        self.path = path   #定义成员变量记录文件的路径
    def read_data(self) -> list[Record]:  #复写(实现抽象方法）父类的方法
        f = open(self.path,'r',encoding="UTF-8")
        record_list: list[Record] = []   #record_list列表中都存放了Record类的元素
        for line in f.readlines():  #把文件一行行打印出来
            line = line.strip()  #消除读取到的每一行数据中的\n
            data_list = line.split(",")    #变成list列表
            record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3])
            record_list.append(record)
        f.close()
        return record_list
class JsonFileReader(FileReader):   #单继承，继承FileReader
    def __init__(self,path):
        self.path = path   #定义成员变量记录文件的路径
    def read_data(self) -> list[Record]:
        f = open(self.path,'r',encoding="UTF-8")
        record_list: list[Record] = []
        for line in f.readlines():
            data_dict = json.loads(line)   #将json数据转换python数据
            record = Record(data_dict["date"],data_dict["order_id"],data_dict["money"],data_dict["province"])
            record_list.append(record)   #通过内置魔术方法来获得相应的值
        f.close()
        return record_list

if __name__ == '__main__':    #跑程序，但不会把数据导包到程序中
    text_file_reader = TextFileReader("2011年1月销售数据.txt")
    json_file_reader = JsonFileReader("2011年2月销售数据JSON.txt")
    list1 = text_file_reader.read_data()
    list2 = json_file_reader.read_data()
    for l in list1:
        print(l)
    for l in list2:
        print(l)